/*
 * $Id: ReplaceWithHeadAction.java 122 2002-11-14 20:09:43Z bpruessmann $
 * 
 * Copyright (c) 2001,2002 Boris Pruessmann and others.
 * All rights reserved.   This program and the accompanying materials
 * are made available under the terms of the Common Public License v0.5
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/cpl-v05.html
 * 
 * Contributors:
 *    Boris Pruessmann - Initial implementation.
 */
package net.sourceforge.perforce.ui.action;

import net.sourceforge.perforce.core.PerforceCorePlugin;
import net.sourceforge.perforce.core.PerforceException;
import net.sourceforge.perforce.core.internal.P4TeamProvider;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.jface.action.IAction;
import org.eclipse.team.core.RepositoryProvider;

/**
  * @version $Revision: 122 $
  * @author  <a href="mailto:bpruessmann@users.sourceforge.net">Boris Pruessmann</a>
  */
public class ReplaceWithHeadAction extends SyncToHeadAction
{
	// ------------------------------------------------------------------------------ Public Methods
	
	/** @see IActionDelegate#run(IAction) */
	public void run(IAction action)
	{
		// When replacing files, we first have to make them read-only in case the client spec
		// doesn't allow writing to read-write files (noclobber)
		IResource[] resources = getSelectedResources();
		for (int i = 0; i < resources.length; i++)
		{
			IFile file = (IFile) resources[i];
			file.setReadOnly(true);
		}
		
		super.run(action);
	}
	
	// --------------------------------------------------------------------------- Protected Methods
	
	/** @see TeamAction#isEnabled() */
	protected boolean isEnabled() 
		throws PerforceException
	{
		IResource[] resources = getSelectedResources();
		if (resources.length == 0)
		{
			return false;
		}
			
		for (int i = 0; i < resources.length; i++) 
		{
			RepositoryProvider tempProvider = 
				RepositoryProvider.getProvider(resources[i].getProject());
			if (tempProvider == null || 
			    !tempProvider.getID().equals(PerforceCorePlugin.getTypeId()))
			{
				return false;
			}
				
			P4TeamProvider provider = (P4TeamProvider) tempProvider;
			if (provider.isCheckedOut(resources[i]))
			{
				return false;
			}
				
			if (!provider.hasRemote(resources[i])) 
			{
				return false;	
			}
		}
		
		return true;
	}
}
